package com.gxc.integer;

/**
 * 小Q得到一个神奇的数列: 1，12，123,...12345678910,1234567891011...。
 * 并且小Q对于能否被3整除这个性质很感兴趣。
 * 小Q现在希望你能帮他计算一下从数列的第1个到第r个(包含端点)有多少个数可以被3整除。输入描述:
 * 输入包括两个整数I和r(1<= I<= r <= 1e9)，表示要求解的区间两端。输出描述:
 * 输出一个整数，表示区间内能被3整除的数字个数。示例1:
 * 输入 2 5
 * 输出 3
 *
 * 1e9=10 0000 0000
 * 一个数能不能被三整除
 * 数内所有的数字相加%3 == 0 ，则能被三整除
 * 1234567891011 = (1+2+3+4+5+6+7+8+9+1+1+1 ) %3
 *               = (1+2+3+4+5+6+7+8+9+10+11)%3
 * 所以题目转成 n*(n+1)/2%3 == 0,由于 1e9 数值过大。改用long接收
 */
public class DivisibleByThree {

    public static void main(String[] args) {
        System.out.println(divisible(2, 5));
    }

    public static int divisible(int l, int r) {
        long num = 0;
        int sum = 0;
        for (int i = l; i <= r; i++) {
            num = i * (i+1) /2 %3;
            if (num ==0) sum++;
        }
        return sum;
    }
}
